package ma.ensao.egicom.bank.services.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.scub.foundation.framework.core.model.BaseModel;

/**
 * Entit� persistante modilisant un compte d'un utilisateur.
 * @author MILHI Yassine (milhi.yassinee@gmail.com)
 */
@Entity
@Table(name = "account")
public class Account extends BaseModel {

    private static final long serialVersionUID = 5608524371460046724L;

    @Column(nullable = false)
    private String accountNumber;

    @Column(nullable = false)
    private Double balance;

    @ManyToOne(fetch = FetchType.LAZY)
    private Client client;

    /**
     * {@inheritDoc}
     */
    @Override
    public boolean equals(Object other) {
        if (other == null || !(other instanceof Account)) {
            return false;
        }
        return equalsUtil(other);
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    /**
     * Retourne le client associ&eacute; &agrave; ce compte.
     * @return client associ&eacute; &agrave; ce compte
     */
    public Client getClient() {
        return client;
    }

    /**
     * Modifie le client associ&eacute; &agrave; ce compte.
     * @param user le client associ&eacute; &agrave; ce compte
     */
    public void setClient(Client user) {
        this.client = user;
    }

    /**
     * Retourne la valeur du num&eacute;ro de compte.
     * @return la valeur du num&eacute;ro de compte
     */
    public String getAccountNumber() {
        return accountNumber;
    }

    /**
     * Modifie la valeur du num&eacute;ro de compte.
     * @param accountNumber le num&eacute;ro de compte &agrave; modifier
     */
    public void setAccountNumber(String accountNumber) {
        this.accountNumber = accountNumber;
    }

    /**
     * Retourne la valeur mon&eacute;tique du compte.
     * @return la valeur mon&eacute;tique du compte
     */
    public Double getBalance() {
        return balance;
    }

    /**
     * Modifie la valeur mon&eacute;tique du compte.
     * @param balance la valeur mon&eacute;tique du compte &agrave; modifier
     */
    public void setBalance(Double balance) {
        this.balance = balance;
    }
}
